package cn.yajienet.data.elasticsearch.init;

import org.springframework.boot.ApplicationArguments;

/**
 * @author Wang Chenguang
 * @Email wangchenguang@nullht.com
 * @Date on 2021/12/30
 * @Description 初始化文档接口
 */
public interface DocumentInitialization {

    /**
     * 初始化文档入口
     *
     * @param args {@link ApplicationArguments}
     * @author Wang Chenguang
     */
    void init(ApplicationArguments args);


    /**
     * 扫描文档，通过@EnableElasticSearchServices已经扫描部分文档，在这里主要扫描ElasticSearchProperties里配置的文档
     *
     * @author Wang Chenguang
     */
    void scanDocuments();

    /**
     * 检查文档配置是否有问题
     *
     * @author Wang Chenguang
     */
    void checkDocuments();

    /**
     * 匹配文档对应的初始化数据组件
     *
     * @author Wang Chenguang
     */
    void matchLoadData();

    /**
     * 创建化文档，设置setting和mapping
     *
     * @author Wang Chenguang
     */
    void initializeDocument();

    /**
     * 配置加载数据的组件
     *
     * @author Wang Chenguang
     */
    void configureLoadingData();

    /**
     * 开始加载数据
     *
     * @author Wang Chenguang
     */
    void startLoadingData();

    /**
     * 运行完成后的监听器
     *
     * @param args {@link ApplicationArguments}
     * @author Wang Chenguang
     */
    void listener(ApplicationArguments args);

    /**
     * 结束运行
     *
     * @author Wang Chenguang
     */
    void end();
}
